package com.example.lib5.sort;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

public class SelectSort {
    public static void main(String[] args) {
        int[] arr={101,34,119,1};
//        System.out.println("原始数组为："+ Arrays.toString(arr));
//        int[] arr=new int[80000];
//        for (int i = 0; i < arr.length; i++) {
//            arr[i]= (int) (Math.random()*80000);
//        }
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date=new Date();
        String time = simpleDateFormat.format(date);
        System.out.println("排序前的时间为："+time);
        selectSort(arr);
        Date date1=new Date();
        String time1 = simpleDateFormat.format(date1);
        System.out.println("排序前的时间为："+time1);
    }

    /**
     * 对数组进行从小到大排序
     * @param arr 要排序的数组
     *            时间复杂度：O(n^2)
     */
    private static void selectSort(int[] arr) {
        //101,34,119,1
        //1,34,119,101
        /*int min=arr[0];//假设第1个为最小值
        int minIndex=0;//假设第0个的索引为最小值
        for (int j = 0; j < arr.length; j++) {
            //如果min>arr数组里面的值，表明它不是最小值，设置标记，为后面来交换位置
            if (min>arr[j]) {
                min=arr[j];
                minIndex=j;
            }
        }
        if (minIndex!=0) {
            //交换位置
            arr[minIndex]=arr[0];
            arr[0]=min;
        }
        //打印
        System.out.println("第一轮交换后的数组为："+ Arrays.toString(arr));

        min = arr[1];//假设第1个为最小值
        minIndex = 1;//假设第0个的索引为最小值
        for (int j = 1; j < arr.length; j++) {
            //如果min>arr数组里面的值，表明它不是最小值，设置标记，为后面来交换位置
            if (min > arr[j]) {
                min = arr[j];
                minIndex = j;
            }
        }
        if (minIndex != 1) {
            //交换位置
            arr[minIndex] = arr[1];
            arr[1] = min;
        }
        //打印
        System.out.println("第二轮交换后的数组为：" + Arrays.toString(arr));

        min = arr[2];//假设第1个为最小值
        minIndex = 2;//假设第0个的索引为最小值
        for (int j = 2; j < arr.length; j++) {
            //如果min>arr数组里面的值，表明它不是最小值，设置标记，为后面来交换位置
            if (min > arr[j]) {
                min = arr[j];
                minIndex = j;
            }
        }
        if (minIndex != 2) {
            //交换位置
            arr[minIndex] = arr[2];
            arr[2] = min;
        }
        //打印
        System.out.println("第三轮交换后的数组为：" + Arrays.toString(arr));*/
        for (int i = 0; i < arr.length-1; i++) {
            int min=arr[i];//假设第1个为最小值
            int minIndex=i;//假设第0个的索引为最小值
            for (int j = i; j < arr.length; j++) {
                //如果min>arr数组里面的值，表明它不是最小值，设置标记，为后面来交换位置
                if (min>arr[j]) {
                    min=arr[j];
                    minIndex=j;
                }
            }
            if (minIndex!=i) {
                //交换位置
                arr[minIndex]=arr[i];
                arr[i]=min;
            }
        }
        //打印
//        System.out.println("交换后的数组为："+ Arrays.toString(arr));
    }
}
